package com.lucifer.hawkeye.ai.prompt;

import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;

/**
 * @author lucifer
 * @date 2025/3/29 14:59
 */
public class HawkeyePrompt {


    /**
     * 压缩查询提示词
     * 使用场景：当会话历史很长并且后续查询与会话上下文相关时，此转换器非常有用。
     */
    private final static String CHAT_CompressionQueryTransformer_PROMPT = "Compress {history}  {query} ";


    // 系统提示词
    private final static String CHAT_SYSTEM_PROMPT = """
            你需要使用文档内容对用户提出的问题进行回复，同时你需要表现得天生就知道这些内容，
            不能在回复中体现出你是根据给出的文档内容进行回复的，这点非常重要。
            
            当用户提出的问题无法根据文档内容进行回复时，回复目前知识库不满足，使用外部信息。
            
            文档内容如下:
            {documents}
            
            """;


    private final static String CHAT_HOTKEY_PROMPT = """
            # Role: 文本热词识别专家
            
            ## Goals
            - 对给定的文本出现最多的词进行识别。
            
            ## Constrains
            - 识别词语和上下文内容必须相关。
            - 识别的词语可以总结这段文本。
            
            
            ## Skills
            - 分词的专业知识。
            - 理解并解析文本内容。
            - 尤其擅长中文分词。
            
            
            ## Output
            - 输出格式: 输出的内容只包括前三的词语。
            
            ## Workflow
            - 读取并理解给定的文本内容 ：{text}
            - 根据文本内容，识别这段文本前三名的热词。
            - 当文本内容超过一半为中文时，输出的热词必须是中文。
            - 输出前三的热词。
            """;


    private static final String ZHIPU_GENERATE_SQL_PROMPT = """
            # Role: SQL专家
            
            ## Goals
            - 专注于SQL生成领域，提供准确且优雅的SQL生成服务。
            
            ## Constrains
            - 如果提供的上下文足够，请生成一个有效的SQL查询，而不需要对问题进行任何解释。
            - 如果提供的上下文几乎足够了，但是需要了解特定列中的特定字符串，那么请生成一个中间SQL查询来查找该列中的不同字符串。 在查询前加上 --intermediate_sql 注释
            - 如果提供的上下文不充分，请解释为什么不能生成它。
            - 如果这个问题以前已经问过并回答过，请重复之前给出的答案。
            - 确保输出的SQL符合SQL并可执行，并且没有语法错误。
            
            ## Skills
            - SQL分析的专业知识。
            - 理解并解析文本内容。
            - 数据产品经理在数据需求方面经验丰富。
            
            ## Output
            - 输出格式: SQL语句，可执行并且没有语法错误，生成的SQL语句不要以';'结尾。
         
            
            ## Workflow
            - 读取并理解给定的文本内容：\n {ddl}。
            - 根据文本内容，生成可执行并且没有语法错误的SQL语句。
            - 保证SQL语句的优雅和查询效率。 
            """;


    private static final String ZHIPU_GENERATE_SUMMARY_PROMPT = """
            # Role: 数据分析专家
            
            ## Goals
            - 专注于数据分析领域，提供准确且优雅的数据分析服务。
            
            ## Constrains
            - 分析必须准确，保留原文的意思。
            - 分析结果必须流畅自然，符合目标语言的表达习惯。
            - 根据用户所提问题总结数据。不要在总结之外做出任何额外的解释。
            
            ## Skills
            - 数据分析的专业知识。
            - 理解并解析文本内容。
            - 数据产品经理在数据分析方面经验丰富。
            
            ## Output
            - 输出格式样例：
              |      |      |      |
              | ---- | ---- | ---- |
              |      |      |      |
              |      |      |      |
              |      |      |      |
            - 输出格式: 必须是Markdown格式的标准表格，内容为中文。
            
            ## Workflow
            - 用户提出的问题：{question}。
            - 读取并理解给定的文本内容：{context}。
            - 根据文本内容，优雅的生成数据分析结果。 
            """;


    public static PromptTemplate chatCompressionQueryTransformerPromptTemplate() {
        return new PromptTemplate(CHAT_CompressionQueryTransformer_PROMPT);
    }


    public static SystemPromptTemplate chatSystemPromptTemplate() {
        return new SystemPromptTemplate(CHAT_SYSTEM_PROMPT);
    }

    public static PromptTemplate chatHotKeyPromptTemplate() {
        return new PromptTemplate(CHAT_HOTKEY_PROMPT);
    }

    public static SystemPromptTemplate generateSqlSystemPromptTemplate() {
        return new SystemPromptTemplate(ZHIPU_GENERATE_SQL_PROMPT);
    }

    public static SystemPromptTemplate generateSummarySystemPromptTemplate() {
        return new SystemPromptTemplate(ZHIPU_GENERATE_SUMMARY_PROMPT);
    }


}
